#pragma once
#include <string>
#include <fstream>
#include <sstream>

namespace Nitro::Renderer {

enum ShaderType
{
    ComputeShader = 0x91B9,
    VertexShader = 0x8B31,
    FragmentShader = 0x8B30,
    GeometryShader = 0x8DD9,
};

enum ShaderSourceType
{
    SourceFile = 0,
    SourceCode = 1,
    BinaryFile = 2,
    BinaryCode = 3,
};

struct ShaderDescriptor
{
    ShaderType type = VertexShader;
    ShaderSourceType sourceType = SourceFile;
    std::string source = "Vertex.glsl";
};

struct Shader
{
    bool hasReport();
    std::string getReport();

    uint32_t id = 0;
};

Shader CreateShader(const ShaderDescriptor& desc);

}